package top.truism.leetcode;

/**
 * 存在一个长度为 n 的数组 arr ，其中 arr[i] = (2 * i) + 1 （ 0 <= i < n ）。
 * <p>
 * 一次操作中，你可以选出两个下标，记作 x 和 y （ 0 <= x, y < n ）并使 arr[x] 减去 1 、arr[y] 加上 1 （即 arr[x] -=1 且 arr[y] += 1 ）。
 * 最终的目标是使数组中的所有元素都 相等 。题目测试用例将会 保证 ：在执行若干步操作后，数组中的所有元素最终可以全部相等
 */
public class LeetCode1551 {

    public int solution(int n) {
        // n=5,则arr是1,3,5,7,9. 需要2+4=6次
        if ((n & 1) == 1) {
            return (2 + n - 1) * (n - 1) / 4;
        } else {
            return (n * n) / 4;
        }
        // n=6,则arr是1,3,5,7,9,11. 需要1+3+5=9次
    }

    /**
     * 对上面思路进行简化
     *
     * @param n
     * @return
     */
    public int solution2(int n) {

        return (n * n - (n & 1)) / 4;

    }

}
